/**
 * @file   delegate.hpp
 * @author wolfhead <wolfhead@wolfhead-laptop>
 * @date   Fri Jul 22 08:46:47 2011
 * 
 * @brief  Delegate is a warpper which put operation 
 *         and operans together
 */

#ifndef ACAPELLA_DELEGATE_DELEGATE_HPP
#define ACAPELLA_DELEGATE_DELEGATE_HPP


#include <acapella/acapella.h>
#include "functor.hpp"

namespace acapella
{
namespace delegate
{

template<typename FunctorType, typename BindType = dynamic_bind, typename ClassType = ClassStub>
class delegate;

template<typename FunctorType, typename BindType = dynamic_bind, typename ClassType = ClassStub>
class delegate_list;

/*
	delegate_type determine a delegate or a delegate_list type
	by Function signature and BindType
*/
template<typename FunctionType, typename BindType>
struct delegate_type{};

// please don't read this file...
// it will be huge and hard to understand
// read delegate_gen_base.hpp instead
#include "delegate_gen.hpp"


}
}

#endif
